package com.cloudkinto.service.wr;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cloudkinto.common.web.PageResult;
import com.cloudkinto.common.web.SingleResult;
import com.cloudkinto.dto.order.returns.product.OrProductPageDto;
import com.cloudkinto.entity.QuotationSchemeDo;
import com.cloudkinto.vo.company.CompanyListVo;
import com.cloudkinto.vo.cost.CostAddEt;
import com.cloudkinto.vo.ft.FreightStatusUpdateReq;
import com.cloudkinto.vo.ft.FreightTempPageVo;
import com.cloudkinto.vo.ob.ChannelEt;
import com.cloudkinto.vo.ob.QsListEtVo;
import com.cloudkinto.vo.wr.QsPageVo;
import com.cloudkinto.vo.wr.WhRentPageVo;
import com.cloudkinto.vo.wr.cost.OrderInputCostReq;
import com.cloudkinto.vo.wr.cost.OrderOutCostReq;
import com.cloudkinto.vo.wr.qs.QsAddReq;
import com.cloudkinto.vo.wr.qs.QsDetailRes;
import com.cloudkinto.vo.wr.qs.QsUpdateReq;
import com.cloudkinto.vo.wr.trial.LcCodeRes;
import com.cloudkinto.vo.wr.trial.TrialFreightRes;
import com.cloudkinto.vo.wr.trial.TrialOmpReq;
import com.cloudkinto.vo.wr.trial.TrialOmsReq;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * service接口
 * </p>
 *
 * @author hua
 * @since 2024-11-15
 */
public interface QuotationSchemeService extends IService<QuotationSchemeDo> {

    void updateStatus(FreightStatusUpdateReq req, Long userId, Long tenantId);


    SingleResult addInit();

    Object add(QsAddReq req, Long userId, Long tenantId);

    SingleResult updateInit(Long id);

    Object update(QsUpdateReq updateVo, Long userId, Long tenantId);

    int delete(Long id, Long userId, Long tenantId);

    QsDetailRes detail(Long id, Long tenantId);

    SingleResult pageInit();

    List<QsPageVo> getList(Map<String, Object> map);

    PageResult getListPage(Map<String, Object> map);

    List<CompanyListVo> listCustomerByWhCode(Map<String, Object> map, Long userId, String source);

    List<ChannelEt> channelList(Map<String, Object> map);

    List<FreightTempPageVo> freightList(Map<String, Object> map);

    List<QsListEtVo> operateBillItemList(Map<String, Object> map);

    List<WhRentPageVo> warehouseRentList(Map<String, Object> map);

    List<QsPageVo> relatedQsList(Map<String, Object> map);

    List<LcCodeRes> getLcForTrial(Long qsId, Long tenantId);


    List<TrialFreightRes> omsTrialFreightFee(TrialOmsReq req);

    List<TrialFreightRes> ompTrialFreightFee(TrialOmpReq req, Long tenantId);


    void costAddReturn(CostAddEt costAddEt, List<OrProductPageDto> orProductPageDtos, Long tenantId);

    void costAddInput(OrderInputCostReq req);

    TrialFreightRes costAddOut(OrderOutCostReq req);

}
